#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int g_val = 100;
//int g_val1 = 1;
//int g_val2;
int main()
{
   pid_t id = fork();
   if(id == 0)
   {
       while(1)
       {
           printf("子进程：pid:%d, ppid:%d, g_val:%d, &g_val:%p\n", getpid(), getppid(), g_val, &g_val);
           sleep(1);
       }
   }
   else 
   {
        int cnt = 5;
        while(1)
        {
             cnt--;
             printf("父进程：pid:%d, ppid:%d, g_val:%d, &g_val:%p\n", getpid(), getppid(), g_val, &g_val);
             sleep(1);
             if(cnt == 0) 
             {
                 g_val = 200;
                 printf("子进程,g_val change: 100->200\n");
             }
        }
   }
   
   // extern char** environ;
   // int i = 0;
   // for(; environ[i]; i++)
   // {
   //     printf("%s\n", environ[i]);
   // }
   //

   // const char* arr = "abcd";
   // printf("代码区地址：%p\n", main);
   // printf("字符常量区地址：%p\n", arr);
   // printf("已初始化全局变量地址: %p\n", &g_val1);
   // printf("未初始化全局变量地址: %p\n", &g_val2);

   // int* mem =(int*)malloc(sizeof(int));
   // printf("堆区地址：%p\n", mem);
   //
   // int a = 0;
   // static int b = 0;
   // printf("栈区地址：%p\n", &arr);
   // printf("a地址：%p\n", &a);
   // printf("b地址：%p\n", &b);
    return 0;
}
